import Dep from './dep.js'

export default class Watcher {
  constructor (vm, key, cb) {
    this.vm = vm
    this.key = key
    this.cb = cb

    // 在 Dep 的静态属性上记录当前 watcher 对象，当访问数据的时候把 watcher 添加到 dep 的 subs 中
    Dep.target = this

    // 触发一次 getter，让当前 key 的 watcher 记录到 dep 中
    this.oldValue = vm[key]
  }

  update () {
    const newValue = this.vm[this.key]
    if (newValue !== this.oldValue) {
      this.cb(newValue)
    }
  }
}
